package pe.com.empresa.web.actions.compras;

import java.util.ArrayList;
import java.util.List;

import pe.com.empresa.datos.dominio.ConsultaFiltroSolicitudes;
import pe.com.empresa.datos.dominio.ConsultaFiltroSolicitudesCriteria;
import pe.com.empresa.datos.dominio.ConsultaObtenerDetalleSolicitudRequisicion;
import pe.com.empresa.datos.dominio.ConsultaObtenerSolicitudRequisicion;
import pe.com.empresa.datos.dominio.ConsultaRolesPorUsuario;
import pe.com.empresa.datos.dominio.DepartementoEmpresa;
import pe.com.empresa.datos.dominio.SolicitudRequisicionDetalle;
import pe.com.empresa.datos.dominio.Usuario;
import pe.com.empresa.servicios.businessdelegate.ComprasBusinessDelegate;
import pe.com.empresa.servicios.servicio.BuscarSolicitudRequisicionService;
import pe.com.empresa.servicios.servicio.ConsultarSolicitudesRequisicionService;
import pe.com.empresa.utiles.ActionHelper;
import pe.com.empresa.utiles.ComboUtil;
import pe.com.empresa.utiles.Constantes;
import pe.com.empresa.utiles.EstadoOperacion;

public class ConsultarSolicitudesRequisicionAction extends ActionHelper {

	private static final long serialVersionUID = -3861143163527045124L;
	//servicios
	private ConsultarSolicitudesRequisicionService service = new ComprasBusinessDelegate().getConsultarSolicitudesRequisicionService();
	private BuscarSolicitudRequisicionService serviceBuscarSolicitud = new ComprasBusinessDelegate().getBuscarSolicitudRequisicionService();

	//combos
	private List<ComboUtil> listaEstados = new ArrayList<ComboUtil>();
	private List<ComboUtil> listaPrioridad = new ArrayList<ComboUtil>();
	private List<ComboUtil> listaTiposSolicitud = new ArrayList<ComboUtil>();
	private List<DepartementoEmpresa> listaDepartamentos;

	//
	private ConsultaFiltroSolicitudesCriteria criteria;
	private String fechaRegistroDesde;
	private String fechaRegistroHasta;
	private String fechaEntregaDesde;
	private String fechaEntregaHasta;
	
	private String stringJson;
	private EstadoOperacion estadoOperacion;
	
	//
	private String numeroSolicitudRequisicion;
	private String codigoArticulo;
	private ConsultaObtenerSolicitudRequisicion solicitud;
	private List<ConsultaObtenerDetalleSolicitudRequisicion> detalleSolicitud;
	
	public ConsultarSolicitudesRequisicionAction(){
		service.setSqlSessionFactory(this.getSqlSessionFactory());
		serviceBuscarSolicitud.setSqlSessionFactory(this.getSqlSessionFactory());
	}
	
	@Override
	public String execute() {

		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		this.cargarCombos();
		return SUCCESS;
	}

	public String filtrarSolicitudes() {
		try {
			
			ConsultaRolesPorUsuario rol = (ConsultaRolesPorUsuario) this.getSessionContext().getAttribute(Constantes.SESION_ROL);
			System.out.println(rol.getIdRol());
			if(rol.getIdRol().intValue() == 2){
				
				Usuario usuario = (Usuario) this.getSessionContext().getAttribute(Constantes.SESION_USUARIO);
				criteria.setIdDepartamento(usuario.getIdDepartamento());
				criteria.setIdGenerador(usuario.getIdPersona());
				criteria.setFechaRegistroDesde(this.dateFormat(this.fechaRegistroDesde));
				criteria.setFechaRegistroHasta(this.dateFormat(this.fechaRegistroHasta));
				criteria.setFechaEntregaDesde(this.dateFormat(this.fechaEntregaDesde));
				criteria.setFechaEntregaHasta(this.dateFormat(this.fechaEntregaHasta));
				
				List<ConsultaFiltroSolicitudes> list = serviceBuscarSolicitud.obtenerSolicitudesFiltroPorArea(criteria);
				System.out.println(list.toString());
				stringJson = this.toListJson(list);
				
			}else{
				
				criteria.setFechaRegistroDesde(this.dateFormat(this.fechaRegistroDesde));
				criteria.setFechaRegistroHasta(this.dateFormat(this.fechaRegistroHasta));
				criteria.setFechaEntregaDesde(this.dateFormat(this.fechaEntregaDesde));
				criteria.setFechaEntregaHasta(this.dateFormat(this.fechaEntregaHasta));
				
				List<ConsultaFiltroSolicitudes> list = serviceBuscarSolicitud.obtenerSolicitudesFiltro(criteria);
				System.out.println(list.toString());
				stringJson = this.toListJson(list);
	
			}
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		return SUCCESS;
	}
	
	public String listaPorDefecto() {
		try {
			
			ConsultaRolesPorUsuario rol = (ConsultaRolesPorUsuario) this.getSessionContext().getAttribute(Constantes.SESION_ROL);
			System.out.println(rol.getIdRol());
			if(rol.getIdRol().intValue() == 2){
				
				Usuario usuario = (Usuario) this.getSessionContext().getAttribute(Constantes.SESION_USUARIO);
				
				ConsultaFiltroSolicitudesCriteria criteria = new ConsultaFiltroSolicitudesCriteria();			
				criteria.setIdGenerador(usuario.getIdPersona());
				//criteria.setIdDepartamento(usuario.getIdDepartamento());
				List<ConsultaFiltroSolicitudes> list = serviceBuscarSolicitud.obtenerSolicitudesFiltroPorDefectoPorArea(criteria);
				System.out.println(list.toString());
				stringJson = this.toListJson(list);
				
			}else{
				ConsultaFiltroSolicitudesCriteria criteria = new ConsultaFiltroSolicitudesCriteria();				
				List<ConsultaFiltroSolicitudes> list = serviceBuscarSolicitud.obtenerSolicitudesFiltroPorDefecto(criteria);
				System.out.println(list.toString());
				stringJson = this.toListJson(list);
	
			}
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
				
		return SUCCESS;
	}
	
	public String mostrarDetalleSolicitud(){
		
		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		this.obtenerSolicitud();
		
		return SUCCESS;
	}
	
	public String registrarReposicion(){
		
		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		this.obtenerSolicitud();
		
		return SUCCESS;
	}
	
	public String registrarMovimientoReposicion(){
		
		if(!this.validarInicioSesion()){
			System.out.println("Inicio de sesion invalido o expirado!!");
			return ERROR;
		}
		
		//invocar al caso de uso registrar movimiento
		
		//actualizar estado de detalle solicitud
		try {
			
			SolicitudRequisicionDetalle detalle = serviceBuscarSolicitud.obtenerDetalleSolicitudRequisicion(this.numeroSolicitudRequisicion, this.codigoArticulo);
			detalle.setEstadoReposicion(2);
			
			service.openSession();
			service.actualizar(detalle);
			service.commit();
			service.closeSession();
			
			//enviar correo al representante de area
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return SUCCESS;
	}
	
	public void obtenerSolicitud(){
		try {
			
			solicitud = serviceBuscarSolicitud.obtenerSolicitudRequisicion(this.numeroSolicitudRequisicion);
			detalleSolicitud = (List<ConsultaObtenerDetalleSolicitudRequisicion>) serviceBuscarSolicitud.obtenerDetalleSolicitudRequisicion(this.numeroSolicitudRequisicion);
			
			System.out.println(solicitud.toString());
			System.out.println(detalleSolicitud.toString());
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public List<ComboUtil> getListaEstados() {
		return listaEstados;
	}

	public void setListaEstados(List<ComboUtil> listaEstados) {
		this.listaEstados = listaEstados;
	}

	public List<ComboUtil> getListaPrioridad() {
		return listaPrioridad;
	}

	public void setListaPrioridad(List<ComboUtil> listaPrioridad) {
		this.listaPrioridad = listaPrioridad;
	}

	public List<ComboUtil> getListaTiposSolicitud() {
		return listaTiposSolicitud;
	}

	public void setListaTiposSolicitud(List<ComboUtil> listaTiposSolicitud) {
		this.listaTiposSolicitud = listaTiposSolicitud;
	}

	public void cargarCombos() {

		// departamentos
		try {
			listaDepartamentos = service.obteDepartementoEmpresas();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			listaDepartamentos = new ArrayList<DepartementoEmpresa>();
			e.printStackTrace();
		}

		// prioridad
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("1");
			combo.setDescriptivo("Alta");
			this.listaPrioridad.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("2");
			combo.setDescriptivo("Media");
			this.listaPrioridad.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("3");
			combo.setDescriptivo("Baja");
			this.listaPrioridad.add(combo);
		}
		// estados
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("1");
			combo.setDescriptivo("Generada");
			this.listaEstados.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("2");
			combo.setDescriptivo("Atentida");
			this.listaEstados.add(combo);
		}
		// tipos
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("1");
			combo.setDescriptivo("Natural");
			this.listaTiposSolicitud.add(combo);
		}
		{
			ComboUtil combo = new ComboUtil();
			combo.setValor("2");
			combo.setDescriptivo("Sistema");
			this.listaTiposSolicitud.add(combo);
		}
	}

	public List<DepartementoEmpresa> getListaDepartamentos() {
		return listaDepartamentos;
	}

	public void setListaDepartamentos(
			List<DepartementoEmpresa> listaDepartamentos) {
		this.listaDepartamentos = listaDepartamentos;
	}

	public ConsultaFiltroSolicitudesCriteria getCriteria() {
		return criteria;
	}

	public void setCriteria(ConsultaFiltroSolicitudesCriteria criteria) {
		this.criteria = criteria;
	}

	public String getFechaRegistroDesde() {
		return fechaRegistroDesde;
	}

	public void setFechaRegistroDesde(String fechaRegistroDesde) {
		this.fechaRegistroDesde = fechaRegistroDesde;
	}

	public String getFechaRegistroHasta() {
		return fechaRegistroHasta;
	}

	public void setFechaRegistroHasta(String fechaRegistroHasta) {
		this.fechaRegistroHasta = fechaRegistroHasta;
	}

	public String getFechaEntregaDesde() {
		return fechaEntregaDesde;
	}

	public void setFechaEntregaDesde(String fechaEntregaDesde) {
		this.fechaEntregaDesde = fechaEntregaDesde;
	}

	public String getFechaEntregaHasta() {
		return fechaEntregaHasta;
	}

	public void setFechaEntregaHasta(String fechaEntregaHasta) {
		this.fechaEntregaHasta = fechaEntregaHasta;
	}

	public String getStringJson() {
		return stringJson;
	}

	public void setStringJson(String stringJson) {
		this.stringJson = stringJson;
	}

	public EstadoOperacion getEstadoOperacion() {
		return estadoOperacion;
	}

	public void setEstadoOperacion(EstadoOperacion estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}

	public ConsultaObtenerSolicitudRequisicion getSolicitud() {
		return solicitud;
	}

	public void setSolicitud(ConsultaObtenerSolicitudRequisicion solicitud) {
		this.solicitud = solicitud;
	}


	public List<ConsultaObtenerDetalleSolicitudRequisicion> getDetalleSolicitud() {
		return detalleSolicitud;
	}

	public void setDetalleSolicitud(
			List<ConsultaObtenerDetalleSolicitudRequisicion> detalleSolicitud) {
		this.detalleSolicitud = detalleSolicitud;
	}

	public String getNumeroSolicitudRequisicion() {
		return numeroSolicitudRequisicion;
	}

	public void setNumeroSolicitudRequisicion(String numeroSolicitudRequisicion) {
		this.numeroSolicitudRequisicion = numeroSolicitudRequisicion;
	}

	public String getCodigoArticulo() {
		return codigoArticulo;
	}

	public void setCodigoArticulo(String codigoArticulo) {
		this.codigoArticulo = codigoArticulo;
	}

}
